home *** CD-ROM | disk | FTP | other *** search
/ Usenet 1993 July / InfoMagic USENET CD-ROM July 1993.ISO / sources / misc / volume15 / dmake-3.6 / part13 < prev    next >
Encoding:
Text File  |  1990-10-14  |  39.0 KB  |  991 lines

  1. Newsgroups: comp.sources.misc
  2. X-UNIX-From: dvadura@watdragon.waterloo.edu
  3. subject: v15i065: dmake version 3.6 (part 13/25)
  4. from: Dennis Vadura <dvadura@watdragon.waterloo.edu>
  5. Sender: allbery@uunet.UU.NET (Brandon S. Allbery - comp.sources.misc)
  6.  
  7. Posting-number: Volume 15, Issue 65
  8. Submitted-by: Dennis Vadura <dvadura@watdragon.waterloo.edu>
  9. Archive-name: dmake-3.6/part13
  10.  
  11. #!/bin/sh
  12. # this is part 13 of a multipart archive
  13. # do not concatenate these parts, unpack them in order with /bin/sh
  14. # file man/dmake.p continued
  15. #
  16. CurArch=13
  17. if test ! -r s2_seq_.tmp
  18. then echo "Please unpack part 1 first!"
  19.      exit 1; fi
  20. ( read Scheck
  21.   if test "$Scheck" != $CurArch
  22.   then echo "Please unpack part $Scheck next!"
  23.        exit 1;
  24.   else exit 0; fi
  25. ) < s2_seq_.tmp || exit 1
  26. echo "x - Continuing file man/dmake.p"
  27. sed 's/^X//' << 'SHAR_EOF' >> man/dmake.p
  28. X
  29. X     --ee   Read the environment and define all strings of the form
  30. X          'EENNVV--VVAARR=_e_v_a_l_u_e' defined within as macros whose name is
  31. X          EENNVV--VVAARR, and whose value is '_e_v_a_l_u_e'.  The environment
  32. X          is processed prior to processing the user specified
  33. X          makefile thereby allowing definitions in the makefile
  34. X          to override definitions in the environment.
  35. X
  36. X
  37. X
  38. XVersion 3.50                    UW                              1
  39. X
  40. X
  41. X
  42. X
  43. XDMAKE(p)               Unsupported Software               DMAKE(p)
  44. X
  45. X
  46. X
  47. X     --EE   Same as -e, except that the environment is processed
  48. X          after the user specified makefile has been processed
  49. X          (thus definitions in the environment override defini-
  50. X          tions in the makefile).  The -e and -E options are
  51. X          mutually exclusive.  If both are given the latter one
  52. X          takes effect.
  53. X
  54. X     --ff ffiillee
  55. X          Use ffiillee as the source for the makefile text.  Only one
  56. X          --ff option is allowed.
  57. X
  58. X     --hh   Print the command summary for ddmmaakkee.
  59. X
  60. X     --ii   Tells ddmmaakkee to ignore errors, and continue making other
  61. X          targets.  This is equivalent to the .IGNORE attribute
  62. X          or macro.
  63. X
  64. X     --kk   Causes ddmmaakkee to ignore errors caused by command execu-
  65. X          tion and to make all targets not depending on targets
  66. X          that could not be made. Ordinarily ddmmaakkee stops after a
  67. X          command returns a non-zero status, specifying --kk causes
  68. X          ddmmaakkee to ignore the error and continue to make as much
  69. X          as possible.
  70. X
  71. X     --nn   Causes ddmmaakkee to print out what it would have executed,
  72. X          but does not actually execute the commands.  A special
  73. X          check is made for the string "$(MAKE)" inside a recipe
  74. X          line, if found, the line is expanded and invoked,
  75. X          thereby enabling recursive makes to give a full
  76. X          description of all that they will do.  The check for
  77. X          "$(MAKE)" is disabled inside group recipes.
  78. X
  79. X     --pp   Print out a version of the digested makefile in human
  80. X          readable form.  (useful for debugging, but cannot be
  81. X          re-read by ddmmaakkee)
  82. X
  83. X     --PP##  On systems that support multi-processing cause ddmmaakkee to
  84. X          use _# concurrent child processes to make targets.  See
  85. X          the "MULTI PROCESSING" section for more information.
  86. X
  87. X     --qq   Check and see if the target is up to date.  Exits with
  88. X          code 0 if up to date, 1 otherwise.
  89. X
  90. X     --rr   Tells ddmmaakkee not to read the initial startup makefile,
  91. X          see STARTUP section for more details.
  92. X
  93. X     --ss   Tells ddmmaakkee to do all its work silently and not echo
  94. X          the commands it is executing to stdout (also suppresses
  95. X          warnings).  This  is equivalent to the .SILENT attri-
  96. X          bute or macro.
  97. X
  98. X
  99. X
  100. X
  101. X
  102. XVersion 3.50                    UW                              2
  103. X
  104. X
  105. X
  106. X
  107. XDMAKE(p)               Unsupported Software               DMAKE(p)
  108. X
  109. X
  110. X
  111. X     --SS   Force sequential execution of recipes on architectures
  112. X          which support concurrent makes.  For backward compati-
  113. X          bility with old makefiles that have nasty side-effect
  114. X          prerequisite dependencies.
  115. X
  116. X     --tt   Causes ddmmaakkee to touch the targets and bring them up to
  117. X          date without executing any commands.
  118. X
  119. X     --TT   Tells ddmmaakkee to not perform transitive closure on the
  120. X          inference graph.
  121. X
  122. X     --uu   Force an unconditional update.  (ie. do everything that
  123. X          would be done if everything that a target depended on
  124. X          was out of date)
  125. X
  126. X     --vv   Verbose flag, when making targets print to stdout what
  127. X          we are going to make and what we think it's timestamp
  128. X          is.
  129. X
  130. X     --VV   Print the version of ddmmaakkee, and values of builtin mac-
  131. X          ros.
  132. X
  133. X     --xx   Upon processing the user makefile export all non-
  134. X          internally defined macros to the user's environment.
  135. X          This option together with the -e option allows SYSV
  136. X          AUGMAKE recursive makes to function as expected.
  137. X
  138. XIINNDDEEXX
  139. X     Here is a list of the sections that follow and a short
  140. X     description of each.  Perhaps you won't have to read the
  141. X     whole man page to find what you need.
  142. X
  143. X     SSTTAARRTTUUPP            Describes ddmmaakkee initialization.
  144. X
  145. X     SSYYNNTTAAXX             Describes the syntax of makefile expres-
  146. X                        sions.
  147. X
  148. X     AATTTTRRIIBBUUTTEESS         Describes the notion of attributes and
  149. X                        how they are used when making targets.
  150. X
  151. X     MMAACCRROOSS             Defining and expanding macros.
  152. X
  153. X     RRUULLEESS AANNDD TTAARRGGEETTSS  How to define targets and their prere-
  154. X                        quisites.
  155. X
  156. X     RREECCIIPPEESS            How to tell ddmmaakkee how to make a target.
  157. X
  158. X     TTEEXXTT DDIIVVEERRSSIIOONNSS    How to use text diversions in recipes and
  159. X                        macro expansions.
  160. X
  161. X     SSPPEECCIIAALL TTAARRGGEETTSS    Some targets are special.
  162. X
  163. X
  164. X
  165. X
  166. XVersion 3.50                    UW                              3
  167. X
  168. X
  169. X
  170. X
  171. XDMAKE(p)               Unsupported Software               DMAKE(p)
  172. X
  173. X
  174. X
  175. X     SSPPEECCIIAALL MMAACCRROOSS     Macros used by ddmmaakkee to alter the pro-
  176. X                        cessing of the makefile, and those
  177. X                        defined by ddmmaakkee for the user.
  178. X
  179. X     CCOONNTTRROOLL MMAACCRROOSS     Itemized list of special control macros.
  180. X
  181. X     RRUUNN--TTIIMMEE MMAACCRROOSS    Discussion of special run-time macros
  182. X                        such as $@ and $<.
  183. X
  184. X     FFUUNNCCTTIIOONN MMAACCRROOSS    GNU style function macros, only $(mktmp
  185. X                        ...) for now.
  186. X
  187. X     DDYYNNAAMMIICC PPRREERREEQQUUIISSIITTEESS
  188. X                        Processing of prerequisites which contain
  189. X                        macro expansions in their name.
  190. X
  191. X     BBIINNDDIINNGG TTAARRGGEETTSS    The rules that ddmmaakkee uses to bind a tar-
  192. X                        get to an existing file in the file sys-
  193. X                        tem.
  194. X
  195. X     PPEERRCCEENNTT((%%)) RRUULLEESS   Specification of recipes to be used by
  196. X                        the inference algorithm.
  197. X
  198. X     MMAAKKIINNGG IINNFFEERREENNCCEESS  The rules that ddmmaakkee uses when inferring
  199. X                        how to make a target which has no expli-
  200. X                        cit recipe.  This and the previous sec-
  201. X                        tion are really a single section in the
  202. X                        text.
  203. X
  204. X     MMAAKKIINNGG TTAARRGGEETTSS     How ddmmaakkee makes targets other than
  205. X                        libraries.
  206. X
  207. X     MMAAKKIINNGG LLIIBBRRAARRIIEESS   How ddmmaakkee makes libraries.
  208. X
  209. X     MMUULLTTII PPRROOCCEESSSSIINNGG   Discussion of ddmmaakkee''ss parallel make
  210. X                        facilities for architectures that support
  211. X                        them.
  212. X
  213. X     CCOONNDDIITTIIOONNAALLSS       Conditional expressions which control the
  214. X                        processing of the makefile.
  215. X
  216. X     EEXXAAMMPPLLEESS           Some hopefully useful examples.
  217. X
  218. X     CCOOMMPPAATTIIBBIILLIITTYY      How ddmmaakkee compares with previous versions
  219. X                        of make.
  220. X
  221. X     LLIIMMIITTSS             Limitations of ddmmaakkee.
  222. X
  223. X     PPOORRTTAABBIILLIITTYY        Comments on writing portable makefiles.
  224. X
  225. X     FFIILLEESS              Files used by ddmmaakkee.
  226. X
  227. X
  228. X
  229. X
  230. XVersion 3.50                    UW                              4
  231. X
  232. X
  233. X
  234. X
  235. XDMAKE(p)               Unsupported Software               DMAKE(p)
  236. X
  237. X
  238. X
  239. X     SSEEEE AALLSSOO           Other related programs, and man pages.
  240. X
  241. X     AAUUTTHHOORR             The guy responsible for this thing.
  242. X
  243. X     BBUUGGSS               Hope not.
  244. X
  245. XSSTTAARRTTUUPP
  246. X     When ddmmaakkee begins execution it first processes the command
  247. X     line and then processes an initial startup-makefile.  This
  248. X     is followed by an attempt to locate and process a user sup-
  249. X     plied makefile.  The startup file defines the default values
  250. X     of all required control macros and the set of default rules
  251. X     for making inferences.  When searching for the startup
  252. X     makefile, ddmmaakkee searches the following locations, in order,
  253. X     until a startup file is located:
  254. X
  255. X          1.   The location given as the value of the macro MAK-
  256. X               ESTARTUP defined on the command line.
  257. X
  258. X          2.   The location given as the value of the environment
  259. X               variable MAKESTARTUP defined in the current
  260. X               environment.
  261. X
  262. X          3.   The location given as the value of the macro MAK-
  263. X               ESTARTUP defined internally within ddmmaakkee.
  264. X
  265. X     The above search is disabled by specifying the -r option on
  266. X     the command line.  An error is issued if a startup makefile
  267. X     cannot be found and the -r option was not specified.  A user
  268. X     may substitute a custom startup file by defining the MAKES-
  269. X     TARTUP environment variable or by redefining the MAKESTARTUP
  270. X     macro on the command line.  To determine where ddmmaakkee looks
  271. X     for the default startup file, check your environment or
  272. X     issue the command _"_d_m_a_k_e _-_V_".
  273. X
  274. X     A similar search is performed to locate a default user
  275. X     makefile when no --ff command line option is specified.  The
  276. X     special target .MAKEFILES is defined by default.  This
  277. X     target's prerequisite list specifies the names of files and
  278. X     the order that ddmmaakkee will use to search for them when
  279. X     attempting to locate the default makefile.  A typical defin-
  280. X     ition for this target is:
  281. X
  282. X          .MAKEFILES : makefile.mk Makefile makefile
  283. X
  284. X     ddmmaakkee will first look for makefile.mk and then the others.
  285. X     If a prerequisite cannot be found ddmmaakkee will try to make it
  286. X     before going on to the next prerequisite.  For example,
  287. X     makefile.mk can be checked out of an RCS file if the proper
  288. X     rules for doing so are defined in the startup file.
  289. X
  290. X
  291. X
  292. X
  293. X
  294. XVersion 3.50                    UW                              5
  295. X
  296. X
  297. X
  298. X
  299. XDMAKE(p)               Unsupported Software               DMAKE(p)
  300. X
  301. X
  302. X
  303. XSSYYNNTTAAXX
  304. X     This section is a summary of the syntax of makefile state-
  305. X     ments.  The description is given in a style similar to BNF,
  306. X     where { } enclose items that may appear zero or more times,
  307. X     and [ ] enclose items that are optional.  Alternative pro-
  308. X     ductions for a left hand side are indicated by '->', and
  309. X     newlines are significant.  All symbols in bboolldd type are text
  310. X     or names representing text supplied by the user.
  311. X
  312. X
  313. X
  314. X          Makefile -> { Statement }
  315. X
  316. X          Statement -> Macro-Definition
  317. X                    -> Conditional
  318. X                    -> Rule-Definition
  319. X                    -> Attribute-Definition
  320. X
  321. X          Macro-Definition -> MMAACCRROO == LLIINNEE
  322. X                           -> MMAACCRROO **== LLIINNEE
  323. X                           -> MMAACCRROO ::== LLIINNEE
  324. X                           -> MMAACCRROO **::== LLIINNEE
  325. X                           -> MMAACCRROO ++== LLIINNEE
  326. X                           -> MMAACCRROO ++::== LLIINNEE
  327. X
  328. X          Conditional ->  ..IIFF expression
  329. X                             Makefile
  330. X                          [ ..EELLSSEE
  331. X                             Makefile ]
  332. X                          ..EENNDD
  333. X
  334. X          expression -> LLIINNEE
  335. X                     -> SSTTRRIINNGG ==== LLIINNEE
  336. X                     -> SSTTRRIINNGG !!== LLIINNEE
  337. X
  338. X
  339. X          Rule-Definition ->  target-definition
  340. X                                 [ recipe ]
  341. X
  342. X          target-definition -> targets [attrs] op { PPRREERREEQQUUIISSIITTEE } [;; rcp-line]
  343. X
  344. X          targets -> target { targets }
  345. X                  -> ""target"" { targets }
  346. X
  347. X          target -> special-target
  348. X                 -> TTAARRGGEETT
  349. X
  350. X          attrs -> attribute { attrs }
  351. X                -> ""attribute"" { attrs }
  352. X
  353. X          op -> :: { modifier }
  354. X
  355. X
  356. X
  357. X
  358. XVersion 3.50                    UW                              6
  359. X
  360. X
  361. X
  362. X
  363. XDMAKE(p)               Unsupported Software               DMAKE(p)
  364. X
  365. X
  366. X
  367. X          modifier -> ::
  368. X                   -> ^^
  369. X                   -> !!
  370. X                   -> --
  371. X
  372. X          recipe -> { TTAABB rcp-line }
  373. X                 -> [@@][%%][--] [[
  374. X                       { LLIINNEE }
  375. X                    ]]
  376. X
  377. X          rcp-line -> [@@][%%][--][++] LLIINNEE
  378. X
  379. X
  380. X          Attribute-Definition -> attrs :: targets
  381. X
  382. X
  383. X          attribute -> ..EEPPIILLOOGG
  384. X                    -> ..IIGGNNOORREE
  385. X                    -> ..LLIIBBRRAARRYY
  386. X                    -> ..MMKKSSAARRGGSS
  387. X                    -> ..NNOOIINNFFEERR
  388. X                    -> ..PPRREECCIIOOUUSS
  389. X                    -> ..PPRROOLLOOGG
  390. X                    -> ..SSEETTDDIIRR==_p_a_t_h
  391. X                    -> ..SSIILLEENNTT
  392. X                    -> ..SSEEQQUUEENNTTIIAALL
  393. X                    -> ..SSWWAAPP
  394. X                    -> ..UUSSEESSHHEELLLL
  395. X                    -> ..SSYYMMBBOOLL
  396. X                    -> ..UUPPDDAATTEEAALLLL
  397. X
  398. X          special-target -> ..EERRRROORR
  399. X                         -> ..EEXXPPOORRTT
  400. X                         -> ..GGRROOUUPPEEPPIILLOOGG
  401. X                         -> ..GGRROOUUPPPPRROOLLOOGG
  402. X                         -> ..IIMMPPOORRTT
  403. X                         -> ..IINNCCLLUUDDEE
  404. X                         -> ..IINNCCLLUUDDEEDDIIRRSS
  405. X                         -> ..MMAAKKEEFFIILLEESS
  406. X                         -> ..RREEMMOOVVEE
  407. X                         -> ..SSOOUURRCCEE
  408. X                         -> ..SSOOUURRCCEE.._s_u_f_f_i_x
  409. X                         -> ._s_u_f_f_i_x_1._s_u_f_f_i_x_2
  410. X
  411. X
  412. X     Where, TTAABB represents a <tab> character, SSTTRRIINNGG represents
  413. X     an arbitrary sequence of characters, and LLIINNEE represents a
  414. X     possibly empty sequence of characters terminated by a non-
  415. X     escaped (not immediately preceded by a backslash '\') new-
  416. X     line character.  MMAACCRROO, PPRREERREEQQUUIISSIITTEE, and TTAARRGGEETT each
  417. X     represent a string of characters not including space or tab
  418. X     which respectively form the name of a macro, prerequisite or
  419. X
  420. X
  421. X
  422. XVersion 3.50                    UW                              7
  423. X
  424. X
  425. X
  426. X
  427. XDMAKE(p)               Unsupported Software               DMAKE(p)
  428. X
  429. X
  430. X
  431. X     target.  The name may itself be a macro expansion expres-
  432. X     sion.  A LLIINNEE can be continued over several physical lines
  433. X     by terminating it with a single backslash character.  Com-
  434. X     ments are initiated by the pound '##' character and extend to
  435. X     the end of line.  All comment text is discarded, a '#' may
  436. X     be placed into the makefile text by escaping it with '\'
  437. X     (ie. \# translates to # when it is parsed).  A group of con-
  438. X     tinued lines may be commented out by placing a single # at
  439. X     the start of the first line of the group.  A continued line
  440. X     may not span more than one makefile.
  441. X
  442. X     wwhhiittee ssppaaccee is defined to be any combination of <space>,
  443. X     <tab>, and the sequence \<nl> when \<nl> is used to ter-
  444. X     minate a LINE.  When processing mmaaccrroo definition lines, any
  445. X     amount of white space is allowed on either side of the macro
  446. X     operator (=, *=, :=, *:=, += or +:=), and white space is
  447. X     stripped from both before and after the macro value string.
  448. X     The sequence \<nl> is treated as white space during recipe
  449. X     expansion and is deleted from the final recipe string.  You
  450. X     must escape the \<nl> with a \ in order to get a \ at the
  451. X     end of a recipe line.  The \<nl> sequence is deleted from
  452. X     macro values when they are expanded.
  453. X
  454. X     When processing ttaarrggeett definition lines, the recipe for a
  455. X     target must, in general, follow the first definition of the
  456. X     target (See the RULES AND TARGETS section for an exception),
  457. X     and the recipe may not span across multiple makefiles.  Any
  458. X     targets and prerequisites found on a target definition line
  459. X     are taken to be white space separated tokens.  The rule
  460. X     operator (_o_p in SYNTAX section) is also considered to be a
  461. X     token but does not require white space to precede or follow
  462. X     it.  Since the rule operator begins with a `:', traditional
  463. X     versions of make do not allow the `:' character to form a
  464. X     valid target name.  ddmmaakkee allows `:' to be present in
  465. X     target/prerequisite names as long as the entire
  466. X     target/prerequisite name is quoted.  For example:
  467. X
  468. X          a:fred : test
  469. X
  470. X     would be parsed as TARGET = a, PREREQUISITES are fred, :,
  471. X     and test, which is not what was intended.  To fix this you
  472. X     must write:
  473. X
  474. X          "a:fred" : test
  475. X
  476. X     Which will be parsed as expected.  See the EXAMPLES section
  477. X     for how to apply this to a list of targets.
  478. X
  479. XAATTTTRRIIBBUUTTEESS
  480. X     ddmmaakkee defines several target attributes.  Attributes may be
  481. X     assigned to a single target, a group of targets, or to all
  482. X     targets in the makefile.  Attributes are used to modify
  483. X
  484. X
  485. X
  486. XVersion 3.50                    UW                              8
  487. X
  488. X
  489. X
  490. X
  491. XDMAKE(p)               Unsupported Software               DMAKE(p)
  492. X
  493. X
  494. X
  495. X     ddmmaakkee actions during target update.  The recognized attri-
  496. X     butes are:
  497. X
  498. X
  499. X     ..EEPPIILLOOGG     Insert shell epilog code when executing a group
  500. X                 recipe associated with any target having this
  501. X                 attribute set.
  502. X
  503. X     ..IIGGNNOORREE     Ignore an error when trying to make any target
  504. X                 with this attribute set.
  505. X
  506. X     ..LLIIBBRRAARRYY    Target is a library.
  507. X
  508. X     ..MMKKSSAARRGGSS    If in an MSDOS environment then use MKS extended
  509. X                 argument passing conventions to pass arguments
  510. X                 to commands.  Non-MSDOS environments ignore this
  511. X                 attribute.
  512. X
  513. X     ..NNOOIINNFFEERR    Any target with this attribute set will not be
  514. X                 subjected to transitive closure if it is
  515. X                 inferred as a prerequisite of a target whose
  516. X                 recipe and prerequisites are being inferred.
  517. X                 (i.e. the inference algorithm will not use any
  518. X                 prerequisite with this attribute set, as a tar-
  519. X                 get)
  520. X
  521. X     ..PPRREECCIIOOUUSS   Do not remove this target under any cir-
  522. X                 cumstances.  Set by default for any targets
  523. X                 whose corresponding files exist in the file sys-
  524. X                 tem prior to the execution of ddmmaakkee.
  525. X
  526. X     ..PPRROOLLOOGG     Insert shell prolog code when executing a group
  527. X                 recipe associated with any target having this
  528. X                 attribute set.
  529. X
  530. X     ..SSEEQQUUEENNTTIIAALL Force a sequential make of the associated
  531. X                 target's prerequisites.
  532. X
  533. X     ..SSEETTDDIIRR     Change current working directory to specified
  534. X                 directory when making the associated target.
  535. X                 You must specify the directory at the time the
  536. X                 attribute is specified.  To do this simply give
  537. X                 _._S_E_T_D_I_R_=_p_a_t_h as the attribute.  _p_a_t_h is expanded
  538. X                 and the result is used as the value of the
  539. X                 directory to change to.  If path is surrounded
  540. X                 by single quotes then path is not expanded, and
  541. X                 is used literally as the directory name.  If the
  542. X                 _p_a_t_h contains any `:' characters then the entire
  543. X                 attribute string must be quoted using ".  If a
  544. X                 target having this attribute set also has the
  545. X                 .IGNORE attribute set then if the change to the
  546. X                 specified directory fails it will be ignored,
  547. X
  548. X
  549. X
  550. XVersion 3.50                    UW                              9
  551. X
  552. X
  553. X
  554. X
  555. XDMAKE(p)               Unsupported Software               DMAKE(p)
  556. X
  557. X
  558. X
  559. X                 and no error message will be issued.
  560. X
  561. X     ..SSIILLEENNTT     Do not echo the recipe lines when making any
  562. X                 target with this attribute set, and do not issue
  563. X                 any warnings.
  564. X
  565. X     ..SSWWAAPP       Under MSDOS when making a target with this
  566. X                 attribute set swap the ddmmaakkee executable to disk
  567. X                 prior to executing the recipe line.
  568. X
  569. X     ..SSYYMMBBOOLL     Target is a library member and is an entry point
  570. X                 into a module in the library.  This attribute is
  571. X                 used only when searching a library for a target.
  572. X                 Targets of the form lib((entry)) have this
  573. X                 attribute set automatically.
  574. X
  575. X     ..UUSSEESSHHEELLLL   Force each recipe line of a target to be exe-
  576. X                 cuted using a shell.  Specifying this attribute
  577. X                 is equivalent to specifying the '+' character at
  578. X                 the start of each line of a non-group recipe.
  579. X
  580. X     ..UUPPDDAATTEEAALLLL  Indicates that all the targets listed in this
  581. X                 rule are updated by the execution of the accom-
  582. X                 panying recipe.  A common example is the produc-
  583. X                 tion of the _y_._t_a_b_._c and _y_._t_a_b_._h files by yyaacccc
  584. X                 when it is run on a grammar.  Specifying
  585. X                 .UPDATEALL in such a rule prevents the running
  586. X                 of yacc twice, once for the y.tab.c file and
  587. X                 once for the y.tab.h file.
  588. X
  589. X
  590. X     All attributes are user setable and except for .UPDATEALL
  591. X     and .MKSARGS may be used in one of two forms.  The .MKSARGS
  592. X     attribute is restricted to use as a global attribute, and
  593. X     the use of the .UPDATEALL attribute is restricted to rules
  594. X     of the second form only.
  595. X
  596. X          ATTRIBUTE_LIST : _t_a_r_g_e_t_s
  597. X
  598. X     assigns the attributes specified by ATTRIBUTE_LIST to each
  599. X     target in _t_a_r_g_e_t_s or
  600. X
  601. X          _t_a_r_g_e_t_s ATTRIBUTE_LIST : ...
  602. X
  603. X     assigns the attributes specified by ATTRIBUTE_LIST to each
  604. X     target in _t_a_r_g_e_t_s_. In the first form if _t_a_r_g_e_t_s is empty
  605. X     (ie. a NULL list), then the list of attributes will apply to
  606. X     all targets in the makefile (this is equivalent to the com-
  607. X     mon Make construct of _"_._I_G_N_O_R_E _:_" but has been modified to
  608. X     the notion of an attribute instead of a special target).
  609. X     Not all of the attributes have global meaning.  In particu-
  610. X     lar, .LIBRARY, .SYMBOL, and .UPDATEALL have no assigned
  611. X
  612. X
  613. X
  614. XVersion 3.50                    UW                             10
  615. X
  616. X
  617. X
  618. X
  619. XDMAKE(p)               Unsupported Software               DMAKE(p)
  620. X
  621. X
  622. X
  623. X     global meaning.
  624. X
  625. X     Any attribute may be used with any target, even with the
  626. X     special targets.  Some combinations are useless (e.g.
  627. X     .INCLUDE .PRECIOUS: ... ), while others are useful (e.g.
  628. X     .INCLUDE .IGNORE : "file.mk" will not complain if file.mk
  629. X     cannot be found using the include file search rules, see the
  630. X     section on SPECIAL TARGETS for a description of .INCLUDE).
  631. X     If a specified attribute will not be used with the special
  632. X     target a warning is issued and the attribute is ignored.
  633. X
  634. XMMAACCRROOSS
  635. X     ddmmaakkee supports six types of macro assignment.
  636. X
  637. X
  638. X     MMAACCRROO == LLIINNEE    This is the most common and familiar form of
  639. X                     macro assignment.  It assigns LINE literally
  640. X                     as the value of MACRO.  Future expansions of
  641. X                     MACRO recursively expand it's value.
  642. X
  643. X     MMAACCRROO **== LLIINNEE   This form behaves exactly as the simple '='
  644. X                     form with the exception that if MACRO
  645. X                     already has a value then the assignment is
  646. X                     not performed.
  647. X
  648. X     MMAACCRROO ::== LLIINNEE   This form differs from the simple '=' form
  649. X                     in that it expands LINE prior to assigning
  650. X                     it as the value of MACRO.  Future expansions
  651. X                     of MACRO do not recursively expand it's
  652. X                     value.
  653. X
  654. X     MMAACCRROO **::== LLIINNEE  This form behaves exactly as the ':=' form
  655. X                     with the exception that if MACRO already has
  656. X                     a value then the assignment and expansion
  657. X                     are not performed.
  658. X
  659. X     MMAACCRROO ++== LLIINNEE   This form of macro assignment allows macro
  660. X                     values to grow.  It takes the literal value
  661. X                     of LINE and appends it to the previous value
  662. X                     of MACRO separating the two by a single
  663. X                     space.  Future expansions of MACRO recur-
  664. X                     sively expand it's value.
  665. X
  666. X     MMAACCRROO ++::== LLIINNEE  This form is similar to the '+=' form except
  667. X                     that the value of LINE is expanded prior to
  668. X                     being added to the value of MACRO.
  669. X
  670. X     Macro expressions specified on the command line allow the
  671. X     macro value to be redefined within the makefile only if the
  672. X     macro is defined using the '+=' and '+:=' operators.  Other
  673. X     operators will define a macro that cannot be further modi-
  674. X     fied.
  675. X
  676. X
  677. X
  678. XVersion 3.50                    UW                             11
  679. X
  680. X
  681. X
  682. X
  683. XDMAKE(p)               Unsupported Software               DMAKE(p)
  684. X
  685. X
  686. X
  687. X     When ddmmaakkee defines a non-environment macro it strips leading
  688. X     and trailing white space from the macro value.  Macros
  689. X     imported from the environment via either the .IMPORT special
  690. X     target (see the SPECIAL TARGETS section), or the --ee, or --EE
  691. X     flags are an exception to this rule.  Their values are
  692. X     always taken literally and white space is never stripped.
  693. X     In addition, macros defined using the .IMPORT special target
  694. X     do not have their values expanded when they are used within
  695. X     a makefile.  In contrast, environment macros that are
  696. X     imported due to the specification of the --ee or --EE flags are
  697. X     subject to expansion when used.
  698. X
  699. X     To specify a macro expansion enclose the name in () or {}
  700. X     and precede it with a dollar sign $.  Thus $(TEST)
  701. X     represents an expansion of the macro variable named TEST.
  702. X     If TEST is defined then $(TEST) is replaced by its expanded
  703. X     value.  If TEST is not defined then $(TEST) expands to the
  704. X     NULL string (this is equivalent to defining a macro as
  705. X     'TEST=' ).  A short form may be used for single character
  706. X     named macros.  In this case the parentheses are optional,
  707. X     and $(I) is equivalent to $I.  Macro expansion is recursive,
  708. X     hence, if the value string contains an expression represent-
  709. X     ing a macro expansion, the expansion is performed.  Circular
  710. X     macro expansions are detected and cause an error to be
  711. X     issued.
  712. X
  713. X     When defining a macro the given macro name is first expanded
  714. X     before being used to define the macro.  Thus it is possible
  715. X     to define macros whose names depend on values of other mac-
  716. X     ros.  For example, suppose
  717. X
  718. X          CWD = $(PWD:b)
  719. X
  720. X     is defined, then the value of $(CWD) is the name of the
  721. X     current directory.  This can be used to define macros
  722. X     specific to this directory, for example:
  723. X
  724. X          _$(CWD).prt = list of files to print...
  725. X
  726. X     The actual name of the defined macro is a function of the
  727. X     current directory.  A construct such as this is useful when
  728. X     processing a hierarchy of directories using .SETDIR attri-
  729. X     buted targets and a collection of small distributed makefile
  730. X     stubs.
  731. X
  732. X     Macro variables may be defined within the makefile, on the
  733. X     command line, or imported from the environment.
  734. X
  735. X     ddmmaakkee supports several non-standard macro expansions: The
  736. X     first is of the form:
  737. X
  738. X
  739. X
  740. X
  741. X
  742. XVersion 3.50                    UW                             12
  743. X
  744. X
  745. X
  746. X
  747. XDMAKE(p)               Unsupported Software               DMAKE(p)
  748. X
  749. X
  750. X
  751. X          _$_(_m_a_c_r_o___n_a_m_e_:_m_o_d_i_f_i_e_r___l_i_s_t_:_m_o_d_i_f_i_e_r___l_i_s_t_:_._._._)
  752. X
  753. X     where _m_o_d_i_f_i_e_r___l_i_s_t is chosen from the set { D or d, F or f,
  754. X     B or b, S or s, T or t } and
  755. X
  756. X          d - directory portion of all path names
  757. X          f - file (including suffix) portion of path names
  758. X          b - file (not including suffix) portion of path names
  759. X          s - simple pattern substitution
  760. X          t - tokenization.
  761. X
  762. X     Thus if we have the example:
  763. X
  764. X          test = d1/d2/d3/a.out f.out d1/k.out
  765. X
  766. X     The following macro expansions produce the values on the
  767. X     right of '-->' after expansion.
  768. X
  769. X          $(test:d)            --> d1/d2/d3/ d1/
  770. X          $(test:b)            --> a f k
  771. X          $(test:f)            --> a.out f.out k.out
  772. X          ${test:db}           --> d1/d2/d3/a f d1/k
  773. X          ${test:s/out/in/:f}  --> a.in f.in k.in
  774. X          $(test:f:t"+")       --> a.out+f.out+k.out
  775. X
  776. X     If a token ends in a string composed from the value of the
  777. X     macro DIRBRKSTR (ie. ends in a directory separator string,
  778. X     e.g. '/' in UNIX) and you use the ::dd modifier then the
  779. X     expansion returns the directory name less the final direc-
  780. X     tory separator string.  Thus successive pairs of :d modif-
  781. X     iers each remove a level of directory in the token string.
  782. X
  783. X     The tokenization modifier takes all white space separated
  784. X     tokens from the macro value and separates them by the quoted
  785. X     separator string.  The separator string may contain the fol-
  786. X     lowing escape codes \a => <bel>, \b => <backspace>, \f =>
  787. X     <formfeed>, \n => <nl>, \r => <cr>, \t => <tab>, \v =>
  788. X     <vertical tab>, \" => ", and \xxx => <xxx> where xxx is the
  789. X     octal representation of a character.  Thus the expansion:
  790. X
  791. X          $(test:f:t"+\n")
  792. X     produces:
  793. X          a.out+
  794. X          f.out+
  795. X          k.out
  796. X
  797. X     The second non-standard form of macro expansion allows for
  798. X     recursive macros.  It is possible to specify a $(_m_a_c_r_o___n_a_m_e)
  799. X     or ${_m_a_c_r_o___n_a_m_e} expansion where _m_a_c_r_o___n_a_m_e contains more $(
  800. X     ... ) or ${ ... } macro expansions itself.
  801. X
  802. X
  803. X
  804. X
  805. X
  806. XVersion 3.50                    UW                             13
  807. X
  808. X
  809. X
  810. X
  811. XDMAKE(p)               Unsupported Software               DMAKE(p)
  812. X
  813. X
  814. X
  815. X     For example $(CC$(_HOST)$(_COMPILER)) will first expand
  816. X     CC$(_HOST)$(_COMPILER) to get a result and use that result
  817. X     as the name of the macro to expand.  This is useful for
  818. X     writing a makefile for more than one target environment.  As
  819. X     an example consider the following hypothetical case. Suppose
  820. X     that _HOST and _COMPILER are imported from the environment
  821. X     and are set to represent the host machine type and the host
  822. X     compiler respectively.
  823. X
  824. X          CFLAGS_VAX_CC = -c -O    # _HOST == "_VAX", _COMPILER == "_CC"
  825. X          CFLAGS_PC_MSC = -c -ML   # _HOST == "_PC",  _COMPILER == "_MSC"
  826. X
  827. X          # redefine CFLAGS macro as:
  828. X
  829. X          CFLAGS := $(CFLAGS$(_HOST)$(_COMPILER))
  830. X
  831. X     This causes CFLAGS to take on a value that corresponds to
  832. X     the environment in which the make is being invoked.
  833. X
  834. X     The final non-standard macro expansion is of the form:
  835. X
  836. X          string1{token_list}string2
  837. X
  838. X     where string1, string2 and token_list are expanded.  After
  839. X     expansion, string1 is prepended to each token found in
  840. X     token_list and string2 is appended to each resulting token
  841. X     from the previous prepend.  string1 and string2 are not del-
  842. X     imited by white space whereas the tokens in token_list are.
  843. X     A null token in the token list is specified using "".  Thus
  844. X     using another example we have:
  845. X
  846. X          test/{f1 f2}.o            --> test/f1.o test/f2.o
  847. X          test/ {f1 f2}.o           --> test/ f1.o f2.o
  848. X          test/{f1 f2} .o           --> test/f1 test/f2 .o
  849. X          test/{ f1  "f2" "" }.o    --> test/f1.o test/f2.o
  850. X                                    test/.o
  851. X
  852. X          and
  853. X
  854. X          test/{ d1 d2 }/{ f1 f2 }.o --> test/d1/f1.o
  855. X                                         test/d1/f2.o
  856. X                                         test/d2/f1.o
  857. X                                         test/d2/f2.o
  858. X
  859. X     See the SPECIAL MACROS section for a description of the spe-
  860. X     cial macros that ddmmaakkee defines and understands.
  861. X
  862. XRRUULLEESS AANNDD TTAARRGGEETTSS
  863. X     A makefile contains a series of entries that specify depen-
  864. X     dencies.  Such entries are called _t_a_r_g_e_t_/_p_r_e_r_e_q_u_i_s_i_t_e or
  865. X     _r_u_l_e definitions.  Each rule definition is optionally fol-
  866. X     lowed by a set of lines that provide a recipe for updating
  867. X
  868. X
  869. X
  870. XVersion 3.50                    UW                             14
  871. X
  872. X
  873. X
  874. X
  875. XDMAKE(p)               Unsupported Software               DMAKE(p)
  876. X
  877. X
  878. X
  879. X     any targets defined by the rule.  Whenever ddmmaakkee attempts to
  880. X     bring a target up to date and an explicit recipe is provided
  881. X     with a rule defining the target, that recipe is used to
  882. X     update the target.  A rule definition begins with a line
  883. X     having the following syntax:
  884. X
  885. X          _<_t_a_r_g_e_t_s_> [_<_a_t_t_r_i_b_u_t_e_s_>] _<_r_u_l_e_o_p_> [_<_p_r_e_r_e_q_u_i_s_i_t_e_s_>] [;_<_r_e_c_i_p_e_>]
  886. X
  887. X     _t_a_r_g_e_t_s is a non-empty list of targets.  If the target is a
  888. X     special target (see SPECIAL TARGETS section below) then it
  889. X     must appear alone on the rule line.  For example:
  890. X
  891. X          .IMPORT .ERROR : ...
  892. X
  893. X     is not allowed since both .IMPORT and .ERROR are special
  894. X     targets.  Special targets are not used in the construction
  895. X     of the dependency graph and will not be made.
  896. X
  897. X     _a_t_t_r_i_b_u_t_e_s is a possibly empty list of attributes.  Any
  898. X     attribute defined in the ATTRIBUTES section above may be
  899. X     specified.  All attributes will be applied to the list of
  900. X     named targets in the rule definition.  No other targets will
  901. X     be affected.
  902. X
  903. X
  904. X     NOTE:   As stated earlier, if both the target list and
  905. X             prerequisite list are empty but the attributes list
  906. X             is not, then the specified attributes affect all
  907. X             targets in the makefile.
  908. X
  909. X
  910. X     _r_u_l_e_o_p is a separator which is used to identify the targets
  911. X     from the prerequisites.  Optionally it also provides a
  912. X     facility for modifying the way in which ddmmaakkee handles the
  913. X     making of the associated targets.  In its simplest form the
  914. X     operator is a single ':', and need not be separated by white
  915. X     space from its neighbouring tokens.  It may additionally be
  916. X     followed by any of the modifiers { !, ^, -, : }, where:
  917. X
  918. X
  919. X     !!    says execute the recipe for the associated targets once
  920. X          for each out of date prerequisite.  Ordinarily the
  921. X          recipe is executed once for all out of date prere-
  922. X          quisites at the same time.
  923. X
  924. X     ^^    says to insert the specified prerequisites, if any,
  925. X          before any other prerequisites already associated with
  926. X          the specified targets.  In general, it is not useful to
  927. X          specify ^ with an empty list of prerequisites.
  928. X
  929. X     --    says to clear the previous list of prerequisites before
  930. X          adding the new prerequisites.  Thus,
  931. X
  932. X
  933. X
  934. XVersion 3.50                    UW                             15
  935. X
  936. X
  937. X
  938. X
  939. XDMAKE(p)               Unsupported Software               DMAKE(p)
  940. X
  941. X
  942. X
  943. X               .SUFFIXES :
  944. X               .SUFFIXES : .a .b
  945. X
  946. X          can be replaced by
  947. X
  948. X               .SUFFIXES :- .a .b
  949. X
  950. X          however the old form still works as expected.  NOTE:
  951. X          .SUFFIXES is ignored by ddmmaakkee it is used here simply as
  952. X          an example.
  953. X
  954. X     ::    When the rule operator is not modified by a second ':'
  955. X          only one set of rules may be specified for making a
  956. X          target.  Multiple definitions may be used to add to the
  957. X          list of prerequisites that a target depends on.  How-
  958. X          ever, if a target is multiply defined only one defini-
  959. X          tion may specify a recipe for making the target.
  960. X
  961. X          When a target's rule operator is modified by a second
  962. X          ':' (:: for example) then this definition may not be
  963. X          the only definition with a recipe for the target.
  964. X          There may be other :: target definition lines that
  965. X          specify a different set of prerequisites with a dif-
  966. X          ferent recipe for updating the target. Any such target
  967. X          is made if any of the definitions find it to be out of
  968. X          date with respect to the related prerequisites and the
  969. X          corresponding recipe is used to update the target.
  970. X
  971. X          In the following simple example, each rule has a `::'
  972. X          _r_u_l_e_o_p.  In such an operator we call the first `:' the
  973. X          operator, and the second `:' the modifier.
  974. X
  975. X          a.o :: a.c b.h
  976. X             first recipe for making a.o
  977. X
  978. X          a.o :: a.y b.h
  979. X             second recipe for making a.o
  980. X
  981. X          If a.o is found to be out of date with respect to a.c
  982. X          then the first recipe is used to make a.o.  If it is
  983. X          found out of date with respect to a.y then the second
  984. X          recipe is used.  If a.o is out of date with respect to
  985. SHAR_EOF
  986. echo "End of part 13"
  987. echo "File man/dmake.p is continued in part 14"
  988. echo "14" > s2_seq_.tmp
  989. exit 0
  990.  
  991.